﻿using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using TccServicos.Models;
using TccServicos.Util;

namespace TccServicos.Controllers
{
    public class ChamadaCadastroController : ApiController
    {
        #region Atributos
        private string sThread = "";
        #endregion

        #region WebApis Topicos Avancados Chamada Cadastro
        [HttpPost]
        public RetornoServico SaveChamadaCadastro(ChamadaCadastro cadastro)
        {
            sThread = Util.Util.NextHex(4);
            string nomeFuncao = string.Format("{0} [{1}]", "SaveChamadaCadastro", sThread);

            try
            {
                if (!Validacao.ObjetoValido(cadastro))
                {
                    Log.GravarLog(string.Format("{0}: {1}", nomeFuncao, Validacao.objetoInvalido));
                }

                string jsonEntrada = JsonConvert.SerializeObject(cadastro, new JsonSerializerSettings()
                {
                    NullValueHandling = NullValueHandling.Ignore
                });

                Log.GravarLog(string.Format("{0}: {1}", nomeFuncao, jsonEntrada));

                using (adoteEntitiesTAADS contexto = new adoteEntitiesTAADS())
                {
                    var inclusao = new CHAMADA_CADASTRO
                    {
                        MATRICULA = cadastro.matricula,
                        NOME = cadastro.nome,
                    };
                    contexto.CHAMADA_CADASTRO.Add(inclusao);
                    contexto.SaveChanges();
                    Log.GravarLog(string.Format("{0}: {1}", nomeFuncao, Validacao.salvoComSucesso));
                    return Util.Util.RetornoOk(inclusao.ID_CADASTRO);
                }
            }
            catch (Exception ex)
            {
                Log.GravarLog(string.Format("{0} Erro: {1}", nomeFuncao, ex.ToString()));
                return Util.Util.RetornoErro(ex.ToString());
            }
        }

        [HttpGet]
        public List<ChamadaCadastro> GetChamadaCadastro([FromUri] string matricula = null)
        {
            sThread = Util.Util.NextHex(4);
            string nomeFuncao = string.Format("{0} [{1}]", "GetChamadaCadastro", sThread);

            try
            {
                Log.GravarLog(string.Format("{0}: matricula={1}", nomeFuncao, !string.IsNullOrEmpty(matricula) ? matricula : ""));

                using (adoteEntitiesTAADS contexto = new adoteEntitiesTAADS())
                {
                    var consulta = (from t in contexto.CHAMADA_CADASTRO.AsNoTracking()
                                    select new ChamadaCadastro
                                    {
                                        idCadastro = t.ID_CADASTRO,
                                        matricula = t.MATRICULA,
                                        nome = t.NOME
                                    });
                    if (!string.IsNullOrEmpty(matricula))
                        consulta = consulta.Where(x => x.matricula.Equals(matricula));
                    consulta = consulta.OrderBy(x => x.nome);
                    var retorno = consulta.ToList();

                    Log.GravarLog(string.Format("{0}: {1}", nomeFuncao, Validacao.consultaComSucesso));

                    return retorno;
                }
            }
            catch (Exception ex)
            {
                Log.GravarLog(string.Format("{0} Erro: {1}", nomeFuncao, ex.ToString()));
                return default(List<ChamadaCadastro>);
            }
        }
        #endregion
    }
}
